package com.lsh.service.impl;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;

/**
 * @author ：LiuShihao
 * @date ：Created in 2021/3/19 8:56 上午
 * @desc ：
 * 消息只要被 rabbitmq broker 接收到就会触发 confirmCallback 回调 。
 * correlationData：对象内部只有一个 id 属性，用来表示当前消息的唯一性。
 * ack：消息投递到broker 的状态，true表示成功。
 * cause：表示投递失败的原因。
 *
 */
@Slf4j
@Component
public class ConfirmCallbackServiceImpl implements RabbitTemplate.ConfirmCallback {

    /**
     *  消息只要被 rabbitmq broker 接收到就会触发 confirmCallback 回调 。
     *
     * @param correlationData 对象内部只有一个 id 属性，用来表示当前消息的唯一性。
     * @param ack   消息投递到 broker 的状态，true表示成功。
     * @param cause 表示投递失败的原因。
     */
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {

        if (!ack) {
            //失败回调
            log.error("ConfirmCallback确认模式：消息发送异常，投递到rabbitmq broker 失败!");
        } else {
            //成功回调
            //ack=true, cause=null
            log.info("ConfirmCallback确认模式：生产者已经收到确认,ack="+ack+", cause="+cause+"，消息已经成功投递到 rabbitmq broker");
        }
    }
}